APL is among the best known interactive language systems. It also serves as a system of mathematical-like denotation. APL typically executes on a system including a keyboard, raster display, and an intercoupling CPU. It has been expressly designed to be interactive. This includes the facility to construct, modify, and execute software dynamically. This further includes the direct processing of entire data structures. APL's power derives from the use of a general data structure, the array, with the consequential ability to define powerful operators on the structure. Descriptions of the language system and its facility may be found in Gilman and Rose, "APL: An Interactive Approach", 3rd Edition, John Wiley Publishing Co., copyright 1984; Polivka and Pakin, "APL: The Language and Its Usage", Prentice Hall Publishing Co., copyright 1975; Rodney Zaks, "A Microprogrammed APL Implementation", Sybex, Inc., copyright 1978; and "APL2 Programming: Language Reference", IBM publication SH20-9227-1.
The interactive operating environment of APL permits control to be passed back and forth between an executing program and an operator as necessary. External storage, including software and data, are grouped into workspaces. These may be saved from session to session. System commands are provided to allow workspaces to be brought into central memory from external storage and stored back again after being updated.
APL is implemented traditionally on a interpreted program execution basis. Interaction between an APL session and systems external thereto, such as device drivers and the like, has been by way of a defined message interface and processes auxiliary to and asynchronously executing with respect to the APL workspace/session. The message interface and synchronization mechanism, termed "shared variables", is described by Polivka at pages 439-491.
For purposes of completeness, it should be appreciated that interfaces by which asynchronous processes may synchronously exchange messages may also be performed using such constructs as semaphores, in addition to shared variables. As pointed out by Filman and Friedman, "Coordinated Computing", McGraw Hill Computer Science Series, copyright 1984, pp. 28-43 and 57-73, the shared-variable model has two kinds of objects. These are namely processes and shared variables. The processes compute independently and asynchronously. They communicate only by reading and writing the shared variables. A process that reads a shared variable obtains its value, while a process that writes a shared variable changes its value. Significantly, at any instant, a shared variable has only one value and that value is the one last assigned to it by one of its accessing processes.